package com.atguigu.jxc.dao;

import com.atguigu.jxc.entity.Goods;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @description 商品信息
 */
@Repository
public interface GoodsDao {


    String getMaxCode();

    // 根据商品类别，商品编码或名称模糊分页查询库存
    List<Goods> listIndexStockByCodeOrNameOrType(
            @Param("offSet") int offSet,
            @Param("rows") Integer rows,
            @Param("codeOrName") String codeOrName,
            @Param("goodsTypeId") Integer goodsTypeId);


    // 根据商品编码或名称模糊查询库存的数量
    Integer getGoodsCount(@Param("codeOrName") String codeOrName);

    // 根据商商品名称模糊分页查询商品
    List<Goods> getPageGoodsList(
            @Param("offSet") int offSet,
            @Param("rows") Integer rows,
            @Param("goodsName") String goodsName,
            @Param("goodsTypeId") Integer goodsTypeId);

    // 根据商品名称模糊查询库存的数量
    Integer getPageGoodsCount(@Param("goodsName") String goodsName);

    //根据父菜单ID获取商品
    List<Goods> getGoodsByParentId(@Param("parentId") Integer parentId);

    //获取父类状态
    String getParentTypeState(@Param("pId") Integer pId);

    //查询商品名称是否存在
    Goods findGoodsByName(@Param("goodsName") String goodsName);

    //添加商品
    void saveGoods(Goods goods);

    //修改商品
    void updateGoods(Goods goods);

    //删除商品信息
    void deleteGoods(@Param("goodsId") Integer goodsId);

    //分页查询无库存商品信息
    List<Goods> getPageNoInQuGoods(
            @Param("offSet") int offSet,
            @Param("rows") Integer rows,
            @Param("nameOrCode") String nameOrCode);

    //分页查询无库存商品数量
    Integer getPageNoInQuCount(@Param("nameOrCode") String nameOrCode);

    //分页查询无库存商品信息
    List<Goods> getPageHasInQuGoods(
            @Param("offSet") int offSet,
            @Param("rows") Integer rows,
            @Param("nameOrCode") String nameOrCode);
    //分页查询无库存商品数量
    Integer getPageHasInQuCount(@Param("nameOrCode") String nameOrCode);

    //添加商品期初库存
    Integer saveStock(
            @Param("goodsId") Integer goodsId,
            @Param("inventoryQuantity") Integer inventoryQuantity,
            @Param("purchasingPrice") double purchasingPrice);

    //删除商品库存
    Integer deleteStock(@Param("goodsId") Integer goodsId);

    //根据Id查找Goods
    Goods findByGoodsId(@Param("goodsId") Integer goodsId);

    //查询库存量小于库存下限的商品信息
    List<Goods> getListAlarm();
}
